//
//  LSZStatusViewModel.swift
//  醒浪微博
//
//  Created by 雷顺哲 on 16/7/13.
//  Copyright © 2016年 LSZ. All rights reserved.
//

import UIKit
//处理微博模型显示的内容,对应的视图是 首页自定义的cell
class LSZStatusViewModel: NSObject {
 
//    转发数显示内容
    var retweetStr: String?
//    评论数显示内容
    var commentStr: String?
//    赞数的显示内容
    var unlikeStr: String?
//    处理转发微博内容拼接"@xx:xxxx"
    var retweetContent: String?
//    会员等级图片
    var mbrandImage: UIImage?
//    来源内容
    var sourceContent: String?
//    认证类型等级图片
    var verifiedTypeImage: UIImage?
    
    //  考虑计算属性 - 原因是每次滚动cell的都需要跟我们的当前时间进行对比
    
    /*
    1. 把时间对象转成需要字符串
    
    如果是今年
    判断是否是今天
    判断是否是在1分钟之前
    - 刚刚
    判断是否是在1小时之前
    - xxx分钟前
    其它
    - xx小时前
    
    判断是否是昨天
    - 昨天 10:10
    其他
    - 07-10 10:10
    
    如果不是今年
    - 2015-10-29 10:10

    */
    
    var timeStr: String? {
//        判断微博事件是否为nil
        guard let createAtStr = self.status?.created_at else {
            return nil
        }
        return  NSDate.sinaDate(createAtStr).sinaDateString
        
    }
    
    
//    持有微博模型
    var status:LSZStatus?
    init(status: LSZStatus) {
        super.init()
//        初始化持有的微博模型
        self.status = status
        
        retweetStr = handleCount(status.reposts_count, defaultTitle: "转发")
        commentStr = handleCount(status.comments_count, defaultTitle: "评论")
        unlikeStr = handleCount(status.attitudes_count, defaultTitle: "赞")
        
//        处理转发微博内容的显示
        handleRetweetContent(status)
//        处理会员等级图片
        handleMBrankImage(status.user?.mbrank ?? 0)
//        处理来源字符串
        handleSourceContent(status.source ?? "")
//        处理认证类型等级图片
        handleVerifiedTypeImage(status.user?.verified_type ?? 0)
        
    }
    
    
    
//    处理认证类型的等级图片
    private func handleVerifiedTypeImage(verifiedType: Int) {
        
        //  认证类型等级 认证类型 -1 没有认证 ，0 认证用户，2，3，5 企业认证 ， 220 达人
        switch verifiedType{
            
        case 0 :
            verifiedTypeImage = UIImage(named: "avatar_vip")
        case 2, 3, 5:
            verifiedTypeImage = UIImage(named: "avatar_enterprise_vip")
        case 220:
            verifiedTypeImage = UIImage(named: "avatar_grassroot")
        default:
            verifiedTypeImage = nil
      
        }
      
    }
    
    
    
    
//    处理来源的字符串
    private func handleSourceContent(source: String) {
//        '\'进行字符串转译
        guard let range1 = source.rangeOfString("\">"), let range2 = source.rangeOfString("</") else {
            return
        }
//        代码执行到此范围一定存在
        let startIndex = range1.endIndex
        let endIndex = range2.startIndex
        
//        截取字符串
        sourceContent = "来自" + source.substringWithRange(startIndex..<endIndex)
    }
    
    
    
//    处理会员等级图片
    private func handleMBrankImage(mbrank: Int) {
        if mbrank >= 1 && mbrank <= 6 {
            let image = UIImage(named: "common_icon_membership_level\(mbrank)")
            mbrandImage = image
        }
    }
    
    
    
    
    
    
    
    
    
    
//    处理转发微博内容的显示
    private func handleRetweetContent(status: LSZStatus) {
        
        if status.retweeted_status != nil {
            
            guard let name = status.retweeted_status?.user?.screen_name , let text = status.retweeted_status?.text else {
                return
            }
            
            retweetContent = "@\(name):\(text)"
        }
        
    }
    
    
//    处理显示,转发,评论,赞的数据样式
/*    1.判断count 是否大于0
          判断 count 是否大于等于10000
                对大于1万的数据进行格式化的处理
          否则  显示应有的数字
*/
    private func handleCount(count: Int , defaultTitle: String) -> String {
    
        if count > 0 {
            if count >= 10000 {
                
                let result = Float(count / 1000) / 10
                
                var resultStr = "\(result)万"
                
                if resultStr.containsString(".0"){
                    resultStr = resultStr.stringByReplacingOccurrencesOfString(".0", withString: "")
                }
                return resultStr
   
            } else {
                return "\(count)"
            }
        }else {
            return defaultTitle
        }
    
    }
}


















